package com.turing.post.organization.util;

import java.math.BigInteger;
import java.util.Date;
import java.util.List;

import javax.ejb.Local;
import javax.ejb.Remote;

import com.turing.post.util.PCPSApplicationException;
import com.turing.post.util.PCPSWebInput;

/**
 * 特约商户合同管理（MerchantContract）
 * 
 * @author kangzhe
 * 
 */
@Remote
@Local
public interface MerchantContractDao {

	/**
	 * 创建商户合同
	 * 
	 * @param mct
	 * @throws PCPSApplicationException
	 */
	public void insert(MerchantContract mct) throws PCPSApplicationException;

	/**
	 * 删除商户合同,只有status=3时创建人可删除
	 * 
	 * @param mct
	 * @throws PCPSApplicationException
	 */
	public void delete(MerchantContract mct) throws PCPSApplicationException;

	/**
	 * 更新商户合同信息
	 * 
	 * @param mct
	 * @throws PCPSApplicationException
	 */
	public void update(MerchantContract mct) throws PCPSApplicationException;

	/**
	 * 根据主键查找商户合同信息
	 * 
	 * @param mctId
	 * @return
	 */
	public MerchantContract getMerchantContractById(BigInteger mctId);

	/**
	 * 以锁定方式,根据主键查找商户合同信息
	 * 
	 * @param mctId
	 * @return
	 */
	public MerchantContract getMerchantContractByIdForUpdate(BigInteger mctId);

	/**
	 * 根据条件(名称、合同编号、时间段)组合查询合同列表
	 * 
	 * @param cntractTitle
	 * @param contractNo
	 * @param startDate
	 * @param endDate
	 * @return
	 */
	public List<MerchantContract> getMerchantContractByConditions(
			PCPSWebInput webinput, String contractTitle, String contractNo,
			String startDate, String endDate, String status, Integer page);

	/**
	 * 根据条件(名称、合同编号、时间段)组合查询合同总数
	 * 
	 * @param cntractTitle
	 * @param contractNo
	 * @param startDate
	 * @param endDate
	 * @return
	 */
	public BigInteger getMerchantContractTotalByConditions(
			PCPSWebInput webinput, String cntractTitle, String contractNo,
			String startDate, String endDate, String status);

	/**
	 * 根据商户编号获取商户合同列表
	 * 
	 * @param merchantNo
	 * @return
	 */
	public List<MerchantContract> getMerchantContractDropDownList(
			String merchantNo);

	/**
	 * 根据时间获取需要提醒商户合同到期列表
	 * 
	 * @param webinput
	 * @param startDate
	 * @param endDate
	 * @return
	 */
	public List<MerchantContract> getMerchantContractRemind(
			PCPSWebInput webinput, String startDate, String endDate);

	/**
	 * 合同延期
	 * 
	 * @param contractId
	 */
	public void merchantContractExtension(BigInteger extensionID,
			BigInteger extensionMonth);

	/**
	 * 获取某商户某时间段内是否有重叠的合同信息
	 * 
	 * @param merchantNo
	 * @param startDate
	 * @param endDate
	 * @return
	 */
	public List<MerchantContract> getMCByMrchNoAndDateOverlapping(
			String merchantNo, Date startDate, Date endDate);

	/**
	 * 根据商户号获取商户所有的生效合同
	 * 
	 * @param merchantNo
	 * @return
	 */
	public List<MerchantContract> checkMerchantContractNeedBusinessByMrchNo(
			String merchantNo);
}
